package com.zxc.service.impl;

import com.sun.scenario.effect.Crop;
import com.zxc.dao.CropsDao;
import com.zxc.dao.UserDao;
import com.zxc.model.Crops.CropsVO;
import com.zxc.model.ParkDetails;
import com.zxc.model.Trading.ApplyTrading;
import com.zxc.model.Fertilizer;
import com.zxc.model.Pesticide;
import com.zxc.model.Trading.TradingVO;
import com.zxc.service.CropsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;

@Service
public class CropsServiceImpl implements CropsService {
    @Autowired
    private CropsDao cropsDao;
    @Autowired
    private UserDao userDao;
    public List<CropsVO> getCrocsList(CropsVO crops){
        List<CropsVO> list=cropsDao.selectCrocsByUserId(crops);
        return list;
    }
    public int setTrading(TradingVO vo){
        vo.setId(UUID.randomUUID().toString().replaceAll("-", ""));
        Date d = new Date();
        SimpleDateFormat dqsj = new SimpleDateFormat("yyyy-MM-dd");
        vo.setApplyTimeStart(dqsj.format(d));
        //状态值1：待审批 2：通过 3：不通过
        vo.setState(1);
        int i=cropsDao.insertTrading(vo);
        return i;
}
    public int setTradingPark(TradingVO vo){
        int i=-1;

//        修改园区数据
        ParkDetails parkDetails =new ParkDetails();
        parkDetails.setId(vo.getParkId());
        parkDetails.setParkState(1);
        parkDetails.setPlantId("zwzhj");
        userDao.updatePark(parkDetails);
//        添加入仓记录
        CropsVO cropsVO =new CropsVO();
        //生成作物仓库主键
        cropsVO.setId(UUID.randomUUID().toString().replaceAll("-", ""));
        cropsVO.setLeviteNum2(vo.getTradingNum());
        cropsVO.setParkId(vo.getParkId());
        cropsVO.setPlantId(vo.getPlantId());
        cropsVO.setUserId(vo.getUserId());
        //生成作物入仓时间
        Date d = new Date();
        SimpleDateFormat dqsj = new SimpleDateFormat("yyyy-MM-dd");
        cropsVO.setLeviteTime(dqsj.format(d));
        i=cropsDao.insertCropsIntoWarehouse(cropsVO);
//        入仓成功。
        if(i>0){
            vo.setId(UUID.randomUUID().toString().replaceAll("-", ""));
            vo.setApplyTimeStart(dqsj.format(d));
            vo.setWarehouseCropsId(cropsVO.getId());
            //状态值1：待审批 2：通过 3：不通过
            vo.setState(1);
            return cropsDao.insertTrading(vo)+i;
        }
        //执行插入操作，并返回数据库影响行数。
        return i;
    }



    //查询通过审批的
    public List<TradingVO> getRecordList(TradingVO vo){
        return  cropsDao.selectRecordByUserId(vo);
    }
    //查询未通过审批的
    public List<TradingVO> getRecordListNo(TradingVO vo){
        return  cropsDao.selectRecordByUserIdNo(vo);
    }
    //按月份展示销售额，年份需要在传入数据内指定属性 year,表示展示哪一年的数据
    @Override
    public List<Integer> getMonthMoneyByUserId(TradingVO vo){
        List<Integer> list = new LinkedList<>();
        //通过循环结构，将每个月的销售额存储到list中，12个月份计算完毕再返回。
        for(int i = 1;i <13;i++){
            vo.setMonth(i);
            list.add(cropsDao.selectTradingPriceGroupByMonth(vo).getMonthMoney());
        }
        return list;
    }

    //交易审批申请  可通过
    public int changeApplyTradingStateOk(TradingVO vo){

        //先判断操作者是否是管理员并且申请是否是
        if("root".equals(vo.getPageList().get(0).getAccount())&&vo.getState()==2){
            int i=-1;
                //获取相应申请的交易的作物仓库内的剩余数量并与申请交易作比较
                CropsVO cropsVO = cropsDao.selectCropsByWarehouseId(vo.getWarehouseCropsId()).get(0);
                if(cropsVO.getLeviteNum2() >= vo.getTradingNum()){
                //设置审批时间
                Date d = new Date();
                SimpleDateFormat dqsj = new SimpleDateFormat("yyyy-MM-dd");
                vo.setApplyTimeEnd(dqsj.format(d));
                //插入对应数据库
                cropsDao.updateTradingApplyState(vo);
                //将交易后的余量更新到作物仓库中
                cropsVO.setLeviteNum2(cropsVO.getLeviteNum2() - vo.getTradingNum());
                i=cropsDao.updateCropsWarehouse(cropsVO);
            }else {
                return -3;
            }
            return i;
        }else {
            return 0;
        }
    }
    //交易审批申请  不可通过
    public int changeApplyTradingStateNo(TradingVO vo){

        //先判断操作者是否是管理员并且申请是否是待审批状态
        if("root".equals(vo.getPageList().get(0).getAccount())&&vo.getState()==3){
            int i = -1;
            Date d = new Date();
            SimpleDateFormat dqsj = new SimpleDateFormat("yyyy-MM-dd");
            vo.setApplyTimeEnd(dqsj.format(d));
            i = cropsDao.updateTradingApplyState(vo);
            return i;
        }else {
            return 0;
        }
    }

    @Override
    //将作物录入仓库信息表当中
    public int setCropsIntoWarehouse(CropsVO cropsVO){

        //        修改园区数据
        ParkDetails parkDetails =new ParkDetails();
        parkDetails.setId(cropsVO.getParkId());
        parkDetails.setParkState(1);
        parkDetails.setPlantId("zwzhj");
        userDao.updatePark(parkDetails);
        //生成作物仓库主键
        cropsVO.setId(UUID.randomUUID().toString().replaceAll("-", ""));
        //生成作物入仓时间
        Date d = new Date();
        SimpleDateFormat dqsj = new SimpleDateFormat("yyyy-MM-dd");
        cropsVO.setLeviteTime(dqsj.format(d));
        //执行插入操作，并返回数据库影响行数。
        return cropsDao.insertCropsIntoWarehouse(cropsVO);

    }
}














